#define progma once
#include <semaphore.h>
#include <pthread.h>
#include <unistd.h>
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;

const int g_default_sem_num = 10;
class Sem
{
public:
    Sem(int sem_num = g_default_sem_num)
    :_sem_num(sem_num)
    {
        sem_init(&_sem,0,_sem_num);
    }
    void P()
    {
        int n = sem_wait(&_sem); // 原子的
    }
    void V()
    {
        int n = sem_post(&_sem); // 原子的
    }
    ~Sem()
    {
        sem_destroy(&_sem);
    }

private:
    sem_t _sem;
    int _sem_num;
};